﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using D.ATN.Extensions;

namespace D.ATN
{
    internal static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            try
            {
                var timeOut = ConfigurationManager.AppSettings["HTTP-TIME-OUT"];
                ServiceLocator.TimeOut = timeOut != null ? int.Parse(timeOut) : 120;
                var cache = ConfigurationManager.ConnectionStrings["CACHE"]?.ConnectionString;

                if (cache != null)
                {
                    // 初始化DB
                    var initRes = OrmFactory.AddMyFreeSql(cache);

                    if (initRes == 3)
                    {// sqllite连接失败
                        MessageBox.Show("缓存数据库连接异常。");
                        Application.Exit();
                    }
                    else if (initRes == 0)
                    {// 成功 
                        Application.Run(new FrmMain());
                    }
                    else
                    {// -1 异常
                        MessageBox.Show("数据库连接异常。");
                        Application.Exit();
                    }
                }
                else
                {
                    MessageBox.Show("配置文件加载失败。");
                    Application.Exit();
                }
            }
            catch (Exception)
            {

            }
            finally
            {// 退出的时候执行

                //this.Close(); //只是关闭当前窗口，若不是主窗体的话，是无法退出程序的，另外若有托管线程（非主线程），也无法干净地退出；
                //Application.Exit(); //强制所有消息中止，退出所有的窗体，但是若有托管线程（非主线程），也无法干净地退出；
                //Application.ExitThread(); //强制中止调用线程上的所有消息，同样面临其它线程无法正确退出的问题；
                System.Environment.Exit(0); //这是最彻底的退出方式，不管什么线程都被强制退出，把程序结束的很干净。
            }
        }
    }
}
